package com.fuqiang.nightshopadmin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.fuqiang.nightshopadmin.model.vo.UmsAdminVO;
import com.fuqiang.nightshopumsmodel.entity.UmsAdmin;
import com.fuqiang.nightshopumsmodel.entity.UmsResource;
import com.fuqiang.nightshopumsmodel.entity.UmsRole;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * 后台用户表 服务类
 * </p>
 *
 * @author fuqiang
 * @since 2020-04-14
 */
public interface IUmsAdminService extends IService<UmsAdmin> {
    /**
     * 用户登录
     * @param username
     * @param password
     * @return
     */
    String login(String username, String password);

    /**
     * 根据用户名加载用户信息
     * @param username
     * @return
     */
    UserDetails loadUserByUserName(String username);
    /**
     * 根据用户名获取后台管理员
     */
    UmsAdmin getAdminByUsername(String username);
    /**
     * 获取指定用户的可访问资源
     */
    List<UmsResource> getResourceList(Long adminId);

    /**
     * 分页查询用户
     * @param keyword 用户名称 或者 昵称
     * @param pageSize
     * @param pageNum
     * @return
     */
    IPage<UmsAdmin> list(String keyword, Integer pageSize, Integer pageNum);

    /**
     * 查询指定用户角色
     * @param adminId
     * @return
     */
    List<UmsRole> getRoleList(Long adminId);

    /**
     * 更新指定用户角色
     * @param adminId
     * @param roleIds
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    int updateRole(Long adminId, List<Long> roleIds);

    /**
     * 注册
     * @param umsAdminVO
     * @return
     */
    UmsAdmin register(UmsAdminVO umsAdminVO);

    int update(Long id, UmsAdminVO admin);
}
